
/**
 * @file noeud.c
 * @brief Fichier source du module noeud.
 *
 * @author Rachid Delory
 */

#include "noeud.h"

void init_Noeud(Element n, const char *nom)
{ 
  if(n != NULL){
    ((Noeud*)n)->nom = NULL;
    if(nom != NULL)
      {
	((Noeud*)n)->nom = (char *) malloc ((strlen(nom) + 1) * sizeof(char));
	if(((Noeud*)n)->nom == NULL)
	  {
	    fprintf(stderr, "Problème de malloc\n");
	    exit(1);
	  }
	strcpy(((Noeud*)n)->nom, nom);
      }
  }
}

void initCopie_Noeud(Element * n1, const Element n2)
{
  if(n1 != NULL && n2 != NULL)
    {
      init_Noeud(n1, ((Noeud*)n2)->nom);
    }
}

void creerCopie_Noeud(Element *n1, const Element n2)
{
  (*((Noeud **)n1)) = creer_Noeud(((Noeud *) n2)->nom);
}

Noeud * creer_Noeud(char * nom)
{
  Noeud * res;
  res = (Noeud*) malloc(sizeof(Noeud));
  init_Noeud(res, nom);
  return res;
}

void testament_Noeud(Element n)
{
  if(n != NULL)
    {
      if(((Noeud *)n)->nom != NULL)
	{
	  free(((Noeud *)n)->nom);
	  ((Noeud *)n)->nom = NULL;
	}
    }
}

void detruire_Noeud(Element *n)
{
  if(n != NULL)
    {
      Noeud ** n1 = (Noeud **)n;
      testament_Noeud((*n1));
      free(*n1);
      (*n1) = NULL;
    }
}

void afficher_Noeud(const Element n)
{
  if(n != NULL)
    {
      printf("%s", ((Noeud *)n)->nom);
    }
}

int comparer_Noeud(const Element n1, const Element n2)
{
  Noeud *nd1 = (Noeud *) n1;
  Noeud *nd2 = (Noeud *) n2;
  if(nd1 != NULL && nd2 != NULL)
    {
      int res = 1;
      char * nom1 = nd1->nom;
      char * nom2 = nd2->nom;
      if(nom1 != NULL && nom2 != NULL)
	res = strcmp(nom1, nom2);
      else if(nom1 == NULL && nom2 == NULL){
	res = 0;
      }
      if(res == 0)
	return 1;
    }
  return 0;
  /* 0: les noeuds ne sont pas egaux ; 1: les noeuds sont egaux */ 
}
